#include<iostream>
using namespace std;
//看当前元素是字母还是数字
double calculate(char c) {
    double val = 0;
    switch (c) {
        case 'C':
        case 'c':
            val = 12.01;
            break;
        case 'H':
        case 'h':
            val = 1.008;
            break;
        case 'O':
        case 'o':
            val = 16.00;
            break;
        case 'N':
        case 'n':
            val = 14.01;
            break;
        default:
            val = 0;
            break;
    }
    return val;
}
//我是这样想的， 从前向后遍历，除第一个字母以外（第一个一定是字母），判断是字母还是数字
//设置一个变量tem 是为了H65这样的 计算65的，tem初始是0，这样的话
//当我发现是数字的时候， 那就是 tmp = 0 * 10 + 6   tmp = 6*10 +5
//当发现是字母的时候， 那就记住当前index，并把上次记住的index和tmp相乘 ，加入sum中， 比如C6H56OhOh
//当我发现（这里先不看第一个字母，看O），这个时候你会发现，记住的index是h的位置，tmp是56 就和就行。
//当是第一个字母的时候，直接记住当前index，跳出循环。
//当字母✖️数字的时候，要判断这个数字是不是0，如果是的话，就直接置一。
//同时，由于数组的问题，我是访问不到最后一个（或者循环的时候是len+1），我是在循环结束之后加了最后一个字母。
int main() {
    string s;
     cin >> s;
//    记住当前索引
    int index = 0;
    double sum = 0;
    double temp = 0;
    int len = (int)s.length();
    for (int i = 0; i != len; i++) {

        if (i == 0) {
            index = i;
            continue;
        }
        //        判定是字母
        if (calculate(s[i]) != 0 || (i + 1) > len) {
            if (temp == 0) {
                temp = 1;
            }
            sum += calculate(s[index]) * temp ;
            cout << sum << " " <<calculate(s[index]) * temp << endl;
            temp = 0;
            index = i;
        } else {
            temp = temp * 10 + double(s[i] - '0');
        }
    }
    sum += calculate(s[index]);
    cout << sum<< endl;
    return 0;
}
